# 云胡的编程周报第 012 期
时间:2023/10/30 - 2023/11/5
# 一、点滴记录
# 1
华为服务器调节风扇
- 用网线将
iBMC
远程管理端口连到路由器上,得知这个IP
。 ssh
登录到这个IP
中。- 将风扇模式设置为手动
ipmcset -d fanmode -v 1 100000000
- 将风扇转速设为
20%
,ipmcset -d fanlevel -v 20
# 2
2048
排行榜 bug
问题:有时候玩游戏,发现凌晨一点多提交的数据竟然没有在日榜上,理论上过了晚上 0
点就必须在日榜上。排错过程如下:
- 检查后端代码是否正确,在本地上测了无误。
- 检查
Linux
系统时区和mysql
时区,无误。 - 不在
docker
里面运行后端,直接java -jar
运行,发现无误,定位到问题出在docker
里面。 docker
是有时区的,默认与宿主机一样,但是不知道为什么这边它并没有与宿主机相同。有两种解决方式:- 在创建容器时候加上指定时区即可
docker run -e TZ=Asia/Shanghai
。 - 在
Dockerfile
中指定时区
- 在创建容器时候加上指定时区即可
# 设置时区为"Asia/Shanghai"
ENV TZ=Asia/Shanghai
# 安装时区工具
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && apt-get install -y tzdata
1
2
3
4
5
2
3
4
5
# 3
Python
识别文本语言
from langid.langid import LanguageIdentifier, model
def recognize_text_language(text):
lang_identifier = LanguageIdentifier.from_modelstring(model, norm_probs=True)
language, confidence = lang_identifier.classify(text)
# 语言代码
print(language)
# 置信度,越高说明准确率越高
print(confidence)
print('')
if __name__ == "__main__":
recognize_text_language("我是云胡")
recognize_text_language("My name is yunhu")
recognize_text_language("私は雲胡です")
recognize_text_language("나는 윤후입니다")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
输出:
zh
0.9999608221084119
en
0.9992555904839872
ja
1.0
ko
1.0
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
这里的 zh
和 en
是 ISO 639-1
中的语言代码,用两个字母来标示世界上主要的语言,zh
表示中文,en
表示英文,更多语种信息可以去 ISO 639-1
维基百科词条上查看。
# 4
OpenCV
的 cv2.putText()
无法显示中文,于是先用 PIL
显示,再转为 OpenCV
对象。
def cv2_img_add_chinese_text(img, text, left, top, textColor=(0, 255, 0), textSize=20):
"""
中文文本显示
:param img: 图像
:param text: 文本
:param left: 起始点坐标
:param top: 起始点坐标
:param textColor: 文本颜色
:param textSize: 文本字体大小
:return: opencv 图像
"""
# 判断是否是OpenCV 图片类型
if isinstance(img, np.ndarray):
# 将 OpenCV 格式转换为 PIL 图像格式
# OpenCV 的颜色通道顺序是 BGR, PIL 是 RGB, 所以要先转换一下
img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
# 创建一个绘图对象
draw = ImageDraw.Draw(img)
# 创建一个字体对象, simsun.ttc 是宋体的字体文件,windows 系统在 'C:\Windows\Fonts' 路径下可找到
fontText = ImageFont.truetype("../Font/simsun.ttc", textSize, encoding="utf-8")
# 在图像上绘制文本
draw.text((left, top), text, textColor, fontText)
# 转回 BGR
return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 5
将 numpy
的一维数组存到数据库
# encode 是一个一维数组,有 128 个元素
# 将 NumPy 数组编码为 Base64 字符串,然后将其解码为 UTF-8 文本字符串
encode_string = base64.b64encode(encode).decode('utf-8')
1
2
3
2
3
取出
def base64_to_numpy_array(image_feature):
"""
将从数据库中读取的 base64 转为 numpy 数组
:return:
"""
# 解码成二进制数据
decoded_image_feature = base64.b64decode(image_feature.encode('utf-8'))
# 将原始二进制数据转换为 NumPy 数组
image_feature = np.frombuffer(decoded_image_feature, dtype=np.float32)
# 还原成一个有 128 个元素的一维数组
image_feature = image_feature.reshape((128,))
return image_feature
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 6
Python
要确保脚本中的文本输出是以 UTF-8
编码进行
import sys
sys.stdout = open(sys.stdout.fileno(), mode='w', encoding='utf-8', buffering=1)
1
2
3
2
3
# 7
Spring Boot
运行 Python
脚本
@GetMapping("/test/executePython")
public String executePython() throws IOException, InterruptedException {
// 第一个是 Python 解释器的路径,第二个是脚本路径
String[] arguments = new String[] {"C:\\ProgramData\\anaconda3\\envs\\tensorflow2\\python.exe", "D:\\YunhuCodeProject\\PythonProject\\face-recognition\\detect.py"};
Process proc;
try {
// 执行 py 文件
proc = Runtime.getRuntime().exec(arguments);
// 用输入输出流来截取结果
FileInputStream fileInputStream = (FileInputStream)proc.getErrorStream();
if (Objects.nonNull(fileInputStream)) {
String line = null;
BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream,StandardCharsets.UTF_8));
StringBuilder output = new StringBuilder();
while ((line = reader.readLine()) != null) {
System.out.println(line);
output.append(line).append("\n");
}
// waitFor 是用来显示脚本是否运行成功,1 表示失败,0 表示成功
int re = proc.waitFor();
System.out.println(re);
return String.valueOf(re);
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return "";
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 8
在终端中通过 conda
运行 python
文件
conda run -n my_env_name python test.py
1
my_env_name
是 conda
环境的名称。
# 9
本地连接远程 redis
redis-cli -h xxx.xxx.xxx.xxx -p 6379
1
# 10
Python
对 MySql
数据库操作时,查询操作不需要执行 commit
,只有在执行插入或更新操作后才需要。
# 二、发现
# 1
清华大学开源软件镜像站
https://mirrors.tuna.tsinghua.edu.cn/ (opens new window)
# 2
绘图工具
https://excalidraw.com/ (opens new window)
# 3
能不能好好说话?
https://lab.magiconch.com/nbnhhsh/ (opens new window)
识别缩写。